#include<bits/stdc++.h>
using namespace std;
#define fr first
#define sc second
#define pb push_back
#define lowbit(x) (x&(-x))
#define m_p make_pair
#define P pair<int,int>
typedef long long ll;
ll ta[100005];
int c[100005];
int id[100005];
vector<P> tmp;
int d[20][100005];
int gt(int n){
    int s=0,k=1;
    while(k<n){
        k*=2;
        s++;
    }
    return s;
}
ll sum[20][100005];
int K;
int n,m;
ll xx[100005],a[100005],ans[100005];
int in[20][100005];
void out(){
    ll res=0;
    for(int i=0;i<n;i++) res^=(1ll*ans[i]*(i+1));
    cout<<res<<endl;
}
ll b[100005];
int all[10];
void check(int s,int k){
    for(int i=0;i<s;i++) in[0][i]=i;
    for(int j=1;j<=k;j++){
        for(int i=0;i<(1<<(k-j));i++){
            int x=in[j-1][i*2],y=in[j-1][i*2+1];
            if(!d[j][i]){
                if(b[x]>=j) in[j][i]=x;
                else in[j][i]=y;
            }
            else{
                if(b[y]>=j) in[j][i]=y;
                else in[j][i]=x;
            }
        }
    }
    all[in[k][0]]++;
}
void dfs(int x,int t,int mx){
    if(x==t){
        check(t,mx);
        return;
    }
    for(int i=0;i<=mx;i++){
        b[x]=i;
        dfs(x+1,t,mx);
    }
}
void solve1(){
    for(int i=0;i<m;i++){
        int s=gt(c[i]);
        int k=(1<<s);
        for(int j=0;j<k;j++) all[j]=0;
        for(int j=0;j<c[i];j++) b[j]=a[j];
        dfs(c[i],k,s);
        int now=0;
        for(int j=0;j<k;j++) if(all[j]) now+=j+1;
        ans[id[i]]=now;
        //cout<<c[i]<<" "<<now<<endl;
    }
    out();
}
void solve(){
    for(int i=0;i<4;i++) cin>>xx[i];
    for(int i=0;i<n;i++) a[i]=(ta[i]^xx[(i+1)%4]);
    if(n<=8&&m<=8){
        solve1();
        return;
    }
    for(int i=0;i<n;i++) in[0][i]=i;
    for(int j=1;j<=K;j++){
        for(int i=0;i<(1<<(K-j));i++){
            int x=in[j-1][i*2],y=in[j-1][i*2+1];
            if(!d[j][i]){
                if(a[x]>=j) in[j][i]=x;
                else in[j][i]=y;
            }
            else{
                if(a[y]>=j) in[j][i]=y;
                else in[j][i]=x;
            }
        }
    }
    int k=1,at=0;
    for(int i=0;i<m;i++){
        while(k<c[i]){
            k*=2;
            at++;
        }
        ans[id[i]]=in[at][0]+1;
    }
    out();
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>ta[i];
    for(int i=0;i<m;i++){
        cin>>c[i];
        tmp.pb(m_p(c[i],i));
    }
    sort(tmp.begin(),tmp.end());
    for(int i=0;i<m;i++){
        c[i]=tmp[i].fr;
        id[i]=tmp[i].sc;
    }
    K=gt(n);
    //cout<<K<<endl;
    for(int i=1;i<=K;i++){
        string s;cin>>s;
        for(int j=0;j<s.size();j++) d[i][j]=s[j]-'0';
    }
    int t;cin>>t;
    while(t--) solve();
    return 0;
}